# КАЛЬКУЛЯТОР

## Описание

Простой калькулятор. Вся логика приложения реализована на стороне клиента.

Задачи при разработке:

- совоить практическое применение шаблона ["наблюдатель"](https://refactoring.guru/ru/design-patterns/observer);
- создать проект WebPack и ознакомиться с основными возможностями бандлера.

Код приложения разбит на три части (три основных класса): обработчик ввода, логическое ядро и экран. Каждый класс содержит свойство, ответственное за обработку событий (инстанция класса Subject). При срабатывании события сообщение с его параметрами передается всем объектам, подписанным на Subject. Затем объекты обрабатывают событие в соответствии с описанной логикой. В данном случае сообщения передаются по цепочке "Обработчик ввода -> Логическое ядро -> Экран".

Логичным выбором шаблона для подобной структуры была бы ["цепочка обязанностей"](https://refactoring.guru/ru/design-patterns/chain-of-responsibility). "Наблюдатель" был выбран исключительно для того, чтобы лучше разобраться в реализации принципа подписки на обновления на языке JavaScript.

[-> ОТКРЫТЬ ПРИЛОЖЕНИЕ <-](https://ggm-node-calculator.herokuapp.com/)

## Стек

Клиент:

- JavaScript
- WebPack
- Decimal.js

Сервер:

- Node.js
- JavaScript
- Express
